import json
import datetime
from django.http import HttpResponse


class api:
    def __init__(self, data):
        """
        初始化data
        :param data: List或Dict 数据库数据
        """
        self.data = data

    def success(self):
        """
        成功返回的json
        :return: String 编码后的json字符串
        """
        return HttpResponse(json.dumps(
            {
                'msg': '操作成功',
                'code': 1,
                'data': self.data
            }
        ),
            content_type="application/json"
        )

    def error(self):
        """
        错误返回的json
        :return:
        """
        return HttpResponse(json.dumps(
            {
                'msg': '非法操作',
                'code': 0,
                'data': self.data
            }
        ),
            content_type="application/json"
        )


class query:
    def __init__(self, obj):
        """
        初始化Model对象

        :param obj: Moudel对象
        """
        self.obj = obj
        self.result = None

    def combination(self, arglist):
        """
        提供给all和filter方法组装数据列表

        :param arglist: List 要获取的参数名
        :return: List 所有满足条件的数据对象
        """
        datalist = []
        for item in self.result:
            data = {}
            for arg in arglist:
                if '_time' in arg:  # 处理时间
                    data[arg] = str(getattr(item, arg))[5:19]
                else:
                    data[arg] = getattr(item, arg)

            datalist.append(data)
        return datalist

    def get(self, arglist, **kwargs):
        """
        调用moudels的get方法，获取唯一数据对象

        :param arglist: List 要获取的参数名
        :param kwargs: &Dict 条件参数
        :return: Dict 唯一的数据库数据字典
        """
        try:

            self.result = [self.obj.objects.get(**kwargs)]  # 获取查询对象
            return self.combination(arglist)

        except:
            return None

    def compare(self, **kwargs):
        """
        比较对象中的值（多数用于注册和登录），此方法必须用在get或filter之后

        :param kwargs: &Dict 较的参数值
        :return: Bool 是否匹配
        """
        for kw in kwargs:
            if kwargs[kw] != self.result[0][kw]:
                return False
        return True

    def all(self, arglist):
        """
        获取所有数据

        :param arglist: List 要获取的参数名
        :return: List 所有数据对象
        """

        self.result = self.obj.objects.all()
        return self.combination(arglist)

    def filter(self, arglist, **kwargs):
        """
        调用moudels的get方法，获取唯一数据对象

        :param arglist: List 要获取的参数名
        :param kwargs: &Dict 条件参数
        :return: List 所有满足条件的数据对象
        """
        self.result = self.obj.objects.filter(**kwargs)
        return self.combination(arglist)


def current_datetime():
    return str(datetime.datetime.now())[:-7]
